#include "Message.h"

/*Constructeur*/
void messageInit(Message* monMessage, char* monContenu, char* monDestinataire, char* monPort,int numero,int nombre)
{

  memcpy(monMessage->contenu,monContenu,S_CONTENT);
  memcpy(monMessage->destinataire,monDestinataire,S_URL);
  memcpy(monMessage->port,monPort,S_PORT);
  monMessage->numero=numero;
  monMessage->nombre=nombre;
}

void messageCharger(Message* monMessage, char* source)
{
  FILE* fichier;
  fichier=fopen(source,"r");
  printf("\nINITIALISATION DU MESSAGE DEPUIS UN FICHIER\n");
 /* fgets((int)monMessage->numero,sizeof(int),fichier);
  fgets(monMessage->nombre,sizeof(int),fichier);
  */fgets(monMessage->destinataire,S_URL,fichier);
  fgets(monMessage->port,S_PORT,fichier);
  char * temp = (char*) malloc(sizeof(char[S_CONTENT]));
  while(fgets(temp,S_CONTENT, fichier))
    {
      strcat(monMessage->contenu,temp);
    }
  fclose(fichier);

  printf("Numero: %i \n", monMessage->numero);
  printf("Nombre: %i \n", monMessage->nombre);
  printf("Destinataire: %s \n", monMessage->destinataire);
  printf("Port: %s \n", monMessage->port);
  printf("Contenu: %s \n", monMessage->contenu);

}

void messageSaisir(Message* monMessage)
{
  printf("\nSAISIE D'UN MESSAGE\n");
  printf(" veuillez saisir un destinataire:\n");
  fgets(monMessage->destinataire,S_URL,stdin);
  printf(" veuillez saisir un port:\n");
  fgets(monMessage->port,S_PORT,stdin);
  printf(" veuillez saisir un message:\n");
  fgets(monMessage->contenu,S_CONTENT,stdin);

}

void messageSaisirDestinataire(char* destinataire)
{
  printf(" veuillez saisir un destinataire:\n");
  fgets(destinataire,S_URL,stdin);
}

void messageSaisirPort(char* port)
{
  printf(" veuillez saisir un port:\n");
  fgets(port,S_PORT,stdin);
}

void messageSaisirContenu(char* contenu)
{
  printf(" veuillez saisir un message:\n");
  fgets(contenu,10000,stdin);
}


/*Destructeur*/
void messageSupprimer(Message* monMessage)
{
  free(monMessage->destinataire);
  free(monMessage->contenu);
  free(monMessage->port);

}


/*Accesseurs*/
char* message_destinataire(Message * monMessage)
{
  return monMessage->destinataire;
}
char* message_port(Message * monMessage)
{
  return monMessage->port;
}

char* message_contenu(Message * monMessage)
{
  return monMessage->contenu;
}


/*Mutateur*/
void messageSetDestinataire(Message * monMessage,char* monDestinataire)
{
  strcpy(monMessage->destinataire,monDestinataire);
}
void messageSetPort(Message * monMessage,char* monPort)
{
  strcpy(monMessage->destinataire,monPort);
}
void messageSetContenu(Message * monMessage,char* monContenu)
{
  strcpy(monMessage->contenu,monContenu);
}
/* Opérateurs */
/*Methodes*/
void messageSauvegarder(Message* monMessage, char* chemin)
{
  FILE* fichier;
  printf("\nSAUVEGARDE DU MESSAGE \n");
  printf("message sauvegardé dans: %s\n",chemin);
  fichier=fopen(chemin ,"w");
  fprintf(fichier,"%d\n%d\n%s%s%s", monMessage->numero, monMessage->nombre, monMessage->destinataire,monMessage->port, monMessage->contenu);
  fclose(fichier);
}



void messageTransferer(Message* monMessage, char* destinataire, char* port)
{
  printf("\nTRANSFERT DU MESSAGE \n");

  char contenu[S_CONTENT];
  memcpy(contenu,monMessage->destinataire, S_URL);
  memcpy(&contenu[S_URL],monMessage->port,S_PORT);
  memcpy(&contenu[S_URL+S_PORT],monMessage->contenu, S_CONTENT-S_URL-S_PORT);
  memcpy(monMessage->contenu,contenu,S_CONTENT);

  char dest[S_URL];
  strcpy(dest, destinataire);
  strcat(dest,(char*)"\n");
  strcpy(monMessage->destinataire,dest);


  char monPort[S_PORT];
  strcpy(monPort,port);
  strcat(monPort,(char*)"\n");
  strcpy(monMessage->port,monPort);

  printf("message transferé à: %s:%s\n",destinataire,port);

}

void messageLire(char* chemin)
{
  printf("\nLECTURE DU MESSAGE\n");
  printf("source: %s\n",chemin);

  FILE* fichier;
  char numero[2];  
  char nombre[2];
  char destinataire[S_URL];
  char contenu[S_CONTENT];
  char port[S_PORT];

  fichier=fopen(chemin,"r");
  fgets(numero,sizeof(int),fichier);
  fgets(nombre,sizeof(int),fichier);
  fgets(destinataire,S_URL,fichier);
  fgets(port,S_PORT,fichier);
  fgets(contenu,S_CONTENT, fichier);
  printf("Numero: %s", numero);
  printf("Nombre: %s", nombre);
  printf("Destinataire: %s", destinataire);
  printf("Port: %s",port);
  printf("Contenu: %s\n", contenu);
  fclose(fichier);

}

void messageAfficher(Message* monMessage)
{
  printf("\nAFFICHAGE DU MESSAGE\n");
  printf("Numero du message: %d\n", monMessage->numero);
  printf("Nombre de message: %d\n", monMessage->nombre);
  printf("Destinataire: %s\n", monMessage->destinataire);
  printf("Port: %s\n", monMessage->port);
  printf("Contenu: %s\n", monMessage->contenu);

}

void messageEpurer(Message* monMessage)
{
  printf("\nEPURAGE DU MESSAGE\n");
  //copie du contenu
  char contenu[S_CONTENT];
  memcpy(contenu,monMessage->contenu ,S_CONTENT);
  //strcpy(contenu,monMessage->contenu);
  //char * temp;
  //copie du destinataire
  //temp= strtok(contenu, "\n");
  memcpy(monMessage->destinataire, contenu,S_URL);
  memcpy(monMessage->port, &contenu[S_URL],S_PORT);
  memcpy(monMessage->contenu, &contenu[S_URL+S_PORT], S_CONTENT - S_URL-S_PORT);
  printf("Message Epuré\n");
}
void messageDecrypter(Message* monMessage,char *cle)
{
  printf("\nDECRYPTAGE DU MESSAGE\n");
    decrypte(monMessage->contenu,cle);
  printf("Message Decrypté\n");
}
void messageCrypter(Message* monMessage,char * cle)
{
  printf("\nCRYPTAGE DU MESSAGE\n");
    crypte(monMessage->contenu,cle);
  printf("Message Crypté\n");
	
}
